//LCP 40. 心算挑战
class Solution {
public:
    int maximumScore(vector<int>& cards, int cnt) {
        sort(cards.begin(),cards.end());
        int ret=0;
        int n=cards.size();
        int i=n-1,mount=0,odd=0,even=0;
        while(i>=0)
        {
            ret+=cards[i];
            mount++;
            if(cards[i]%2==0)
                even=cards[i];
            else
                odd=cards[i];
            i--;
            
            if(mount==cnt)
            break;
        }
        //cout<<ret<<endl;
//         vector<int> un(1001);
//         for(auto& e:cards)
//         {
//             un[e]++;
//         }
//         int i=1000,count=cnt,odd=0,even=0;
//         while(i>=0)
//         {
//             if(un[i]&&count)
//             {
// …                {
//                     ret+=(i*count);
//                     count=0;
//                     break;
//                 }
//             }
//             i--;
//         }
        if(mount!=cnt)
            return 0;
        
        if(ret%2!=0)
        {
            if(i<0)
                return 0;
            int odd2=0,even2=0;
            for(int j=0;j<=i;j++)
            {
                if(cards[j]%2==0)
                    even2=cards[j];
                else
                    odd2=cards[j];
            }
            // cout<<odd<<' '<<even<<endl;
            // cout<<odd2<<' '<<even2<<endl;

            int max1=0;
            if(odd&&even2)
                max1=(even2-odd);
            int max2=0;
            if(odd2&&even)
                max2=odd2-even;
                            cout<<max1<<' '<<max2;

            if(max1==0&&max2==0)
                return 0;
            if(max1==0)
                ret+=max2;
            else if(max2==0)
                ret+=max1;
            else
            {if(max1>max2)
            {
                ret+=max1;
            }
            else    
                ret+=max2;}
            
            
        }

        // if(ret%2!=0)
        // {
        //     if(i<0)
        //         return 0;
        //     // if(cards[i+1]%2==0)
        //     // {
        //     //     cout<<flag;
        //     //     ret-=cards[i+1];
        //     //     while(i>=0&&cards[i]%2==0)
        //     //         i--;
        //     //     if(i<0)
        //     //         return 0;
        //     //     ret+=cards[i];
        //     // }
        //     // else
        //     // {
        //     //     ret-=cards[i+1];
        //     //     while(i>=0&&cards[i]%2!=0)
        //     //         i--;
        //     //     if(i<0)
        //     //         return 0;
        //     //     ret+=cards[i];
        //     // }
        //     int max1=0;
        //     int l=i,r=i+1,flag1=0,flag2=0;
        //     while(l>=0&&r<n)
        //     {
        //         if(!flag1)
        //         {
        //             if(cards[l]%2==0)
        //             {    
        //                 max1+=cards[l];
        //                 flag1=1;
        //             }
        //             else
        //                 l--;
        //         }
        //         if(!flag2)
        //         {
        //             if(cards[r]%2!=0)
        //             {
        //                     max1-=cards[r];
        //                     flag2=1;
        //             }
        //             else 
        //                 r++;
        //         }
        //         if(flag1&&flag2)
        //             break;
        //     }
        //     if(l<0||r>=n)
        //         max1=0;
        //     int max2=0;
        //     l=i,r=i+1,flag1=flag2=0;
        //     while(l>=0&&r<n)
        //     {
        //         if(!flag1)
        //         {
        //             if(cards[l]%2!=0)
        //             {    
        //                 max2+=cards[l];
        //                 flag1=1;
        //             }
        //             else
        //                 l--;
        //         }
        //         if(!flag2)
        //         {
        //             if(cards[r]%2==0)
        //             {
        //                     max2-=cards[r];
        //                     flag2=1;
        //             }
        //             else 
        //                 r++;
        //         }
        //         if(flag1&&flag2)
        //             break;
        //     }
        //     cout<<max1<<' '<<max2;
        //     if(l<0||r>=n)
        //         max2=0;
        //     if(max1==0&&max2==0)
        //         return 0;
        //     if(max1==0)
        //         ret+=max2;
        //     if(max2==0)
        //         ret+=max1;
        //     if(max1>max2)
        //         ret+=max1;
        //     else
        //         ret+=max2;
        // }   
        return ret;
    }
};

//682. 棒球比赛
class Solution {
public:
    int calPoints(vector<string>& operations) {
        int ret=0;
        vector<int> vt;
        for(auto& e:operations)
        {
            int i=vt.size()-1;
            if(e=="+")
            {
                vt.push_back(vt[i]+vt[i-1]);
                ret+=vt[i+1];
            }
            else if(e=="D")
            {
                vt.push_back(vt[i]*2);
                ret+=vt[i+1];
            }
            else if(e=="C")
            {
                    vt.pop_back();
                    ret-=vt[i];
            }
            else
            {
                    vt.push_back(stoi(e));
                    ret+=vt[i+1];
            }
        }
        return ret;
    }
};